Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Feature] Add support for custom equality testers #13654

Merged
merged 30 commits into from
Jan 3, 2023

Conversation

andrewiggins
Copy link
Contributor

@andrewiggins andrewiggins commented Dec 1, 2022

Summary

Hello! 👋

This PR adds support for custom equality testers to address RFC #12880. Every so often, issues and comments are filed to extend toEqual abilities to determine if two types are equal (#12880, #7352, #2547 (comment), #10392). A frequently provided workaround is to write a custom matcher using expect.extend. For some use cases this may suffice, but it falls short it two ways:

  1. A custom matcher doesn't account for the many places where an object may show up in other matchers (e.g. as a deep property value in toMatchObject, or a function argument in toHaveBeenCalledWith).
  2. For existing code bases with many thousand tests, migrating to a new matcher and educating existing and new engineers can be cost prohibitive

This PR addresses these asks and resolve those issues by exposing a new addEqualityTesters method on expect. This method accepts an array of custom equality testers that are used by all built-in expect matchers when performing deep equality. The built-in equality testers in @jest/expect-utils also take into account these custom equality testers when performing their equality tests. Further, some matchers do deep equality checks to recommend other matchers that the user may have intended to use (e.g. toBe -> toEqual). These code paths also take into account new custom equality testers.

I went with a property getter/setter as the initial proposal because it allows for more granular control of the custom equality testers on a per describe block basis, as demonstrated in the customEqualityTesters.test.ts file. Though perhaps that is unnecessary and per-file or environment equality testers would suffice and we could go with an API like expect.extendEqualityTesters([]).

Assuming the general approach of this PR is acceptable some remaining TODOs:

  • Determine final API shape
  • Bikeshed name
  • Add a type tests - should be similar to expect.extend() tests which live in packages/expect/typetests/expect.test.ts
  • Add documentation

Test plan

I've added a new test file to assert new functionality works for all relevant matchers. Current test suite also passes locally without changes to ensure existing behavior is preserved.

Co-authored-by: Tom Mrazauskas <tom@mrazauskas.de>
@michkot
Copy link

michkot commented Dec 2, 2022

First, thanks a lot for the PR!
now, review:

You claim that the customEqualityTesters is scoped (if you run it in in describe-before-all it only affects relevant tests?) but it seems you do the scoping manually, quoting:

because it allows for more granular control of the custom equality testers on a per describe block basis

code:
https://github.com/facebook/jest/pull/13654/files#diff-883a0dc67ba4e2fbd2a2d6495cfaaaceb2e4d53b53b13fcdaa7fad82fee88742R163-R166
https://github.com/facebook/jest/blob/1c9b629a495fc5e24d18c23fb7953ffe3fdee8d8/packages/expect/src/__tests__/customEqualityTesters.test.ts#L163-L166
as it is stored globally
(globalThis as any)[JEST_MATCHERS_OBJECT].customEqualityTesters in jestMatchersObject.ts
https://github.com/facebook/jest/pull/13654/files#diff-a8732106aa436d25c41dc86d65afc2f9b7c8285926e5deeae6f69877d54aac53R34-R39
https://github.com/facebook/jest/blob/1c9b629a495fc5e24d18c23fb7953ffe3fdee8d8/packages/expect/src/jestMatchersObject.ts#L34-L41

  • like expect.extended - that also affects all tests
  • this would be tricky if there are concurrent/async tests, isnt it?

I ended up with similar code main...michkot:jest:addCustomDefaultEqualityTestersForExpectUtilsEqual with my hack, and the biggest downside was, that the behavior was always global :/

packages/expect/src/types.ts Outdated Show resolved Hide resolved
packages/expect-utils/src/types.ts Show resolved Hide resolved
iterableEquality(a, b, [...customTesters], [...aStack], [...bStack]);

customTesters = [
...customTesters.filter(t => t !== iterableEquality),
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

why the check? deserver's a code comment i think

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

is it to prevent infinite recursion in case somebody would manage to add the build-in iterableEquality (somehow imported it directly) into the customTesters array in configuration?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yup - except here all testers are passed in the full array of custom testers, including themselves. So currently it is guaranteed you'll be called with yourself in the custom testers array.

I could also do the filtering in the custom testers loop in equals so a tester is never called for itself, but I wasn't sure that was worth since not every tester would need this since not every tester is recursive, but maybe it would make the API easier to work with.

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ye, not sure about the additional filtering...

packages/expect-utils/src/utils.ts Outdated Show resolved Hide resolved
const result = this.equals(
expected,
actual,
jestExpect.customEqualityTesters,
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

not sure whether ... having to / having the option to... specify override of the customEqualityTesters here is a good thing

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The idea here is to enable custom matchers to have the same capabilities as the built in matchers. Built-in matchers need to pass in custom equality testers to equals and so I would like custom matchers to have ability to do the same.

We could look overriding the equals implementation on MatcherContext to automatically pass in custom testers, but then a matcher couldn't customize the testers, which it might want to do. So my thinking was to just require custom matchers to do what the built-in matchers and pass in custom equality testers.

If we change the expect API to something like expect.addEqualityTesters, it would be nice to provide some API for custom matchers to access the added testers. Perhaps as a property on MatcherContext?

Copy link

@michkot michkot Dec 8, 2022

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

So my thinking was to just require custom matchers to do what the built-in matchers and pass in custom equality testers.

Okey, I understand the approach = custom matchers must opt-in to global custom eq. testers being used. I also think its the "safes one", however...

The gotcha is that anyone having custom matchers (especially imported ones) that are not aware of "this PR" might not be passing the testers, while their user (which set-up some custom eq. testers using this PR) would like these extra matchers to respect the custom testers... That leads me to an idea, that maybe the global custom eq testers should be used with custom matchers by default, and they would have to opt-out / override to use different set of them (e.g. empty set).

@michkot
Copy link

michkot commented Dec 2, 2022

Note: it's (definitely) a good think that the custom equality testers in your PR (now) have precedence over the built-ins.

To illustrate, if you would attempt .equals() on two different objects of the same prototype and that both have0 own properties, only own #private fields (which Jest can not see) and some inherited properties (including getters that would return different values, but Jest ignores that) , then the default equality testers in .equals() would return true, because they look like empty objects of the same prototypes :/
The custom equality testers (that would say false, because it would inspect some of the inherited properties and/or call something like a.equal(b) if the objects support it) will never be run.

=> custom equality testers need run sooner

there might also be use-case for some other custom equality testers to be attempted after the built-in ones (added fallback instead of override), but I do not know of one right now.

@andrewiggins
Copy link
Contributor Author

Hey @michkot! Thanks for taking a look and thoughtful comments.

Re: running custom equality testers after built-in ones - I think for now we could probably keep it simple and just always run custom testers first.

@michkot
Copy link

michkot commented Dec 15, 2022

@andrewiggins anything I can do to help push this PR towards successful merging? ;)

@andrewiggins
Copy link
Contributor Author

@michkot I've changed the API to addEqualityTesters. I think we are just waiting for a signal from a Jest maintainer that they'd like this feature and any feedback they have. Once we have that, I'll can update to the feedback and add the relevant docs.

@cpojer
Copy link
Member

cpojer commented Jan 2, 2023

I'm on board 👍

Copy link
Contributor Author

@andrewiggins andrewiggins left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I've added documentation and updated tests to more accurately represent sample usage. I also added a test specifically for recursive testers to demonstrate and test how they work.

packages/expect-utils/src/types.ts Show resolved Hide resolved
For example, let's say you have a `Book` class that contains an array of `Author` classes and both of these classes have custom testers. The `Book` custom tester would want to do a deep equality check on the array of `Author`s and pass in the custom testers so the `Author`s custom equality tester is applied:

```js title="customEqualityTesters.js"
import {equals} from '@jest/expect-utils';
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

can we ask people to use this.equals instead of importing it?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'd be happy to, but currently customTesters are called without any this context (source from this PR). Custom testers are invoked by equals in the expect-utils package and so don't have access to the matcher context.

One idea to avoid importing encouraging importing equals would be to create an EqualityTesterContext with equals and invoke equality testers with that, similar to what we do for matchers and MatchContext. Should I do that?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

right, that makes sense! Yeah, I think we should have a context with at least equals (maybe only that for now?). That way, if people publish custom equality testers, they don't need to care what version of Jest people are using (beyond 29.4+) when we release 30, 31 etc..

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Oh nice! Yea, that makes sense. I believe the latest changes I've pushed do this. Let me know if you see anything else missing!

I've also re-exported the Tester and TesterContext types from the expect package. My thinking was that since those types are implicitly exposed through expect.addEqualityTester, explicitly exporting them would make using TypeScript a little easier and better mirror what people can do with expect.extend with the MatcherFunction and MatcherContext types. However, if you'd prefer people import Tester and TesterContext directly from @jest/expect-utils, we can simply revert that commit.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

sounds good 👍

Copy link
Member

@SimenB SimenB left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

thanks for adding docs! Very thorough and explains the usage well 👍

Copy link
Contributor Author

@andrewiggins andrewiggins left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for taking another look and the approval @SimenB ❤️ Just one more comment thread for us to resolve 😄

For example, let's say you have a `Book` class that contains an array of `Author` classes and both of these classes have custom testers. The `Book` custom tester would want to do a deep equality check on the array of `Author`s and pass in the custom testers so the `Author`s custom equality tester is applied:

```js title="customEqualityTesters.js"
import {equals} from '@jest/expect-utils';
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'd be happy to, but currently customTesters are called without any this context (source from this PR). Custom testers are invoked by equals in the expect-utils package and so don't have access to the matcher context.

One idea to avoid importing encouraging importing equals would be to create an EqualityTesterContext with equals and invoke equality testers with that, similar to what we do for matchers and MatchContext. Should I do that?

Comment on lines +15 to 18
Tester,
TesterContext,
expect,
} from 'expect';
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This re-export looks right. Thanks!

@SimenB SimenB linked an issue Jan 3, 2023 that may be closed by this pull request
@SimenB SimenB merged commit 4fd1cb3 into jestjs:main Jan 3, 2023
@SimenB
Copy link
Member

SimenB commented Jan 3, 2023

Thanks for a fantastic contribution @andrewiggins! And thanks for reviewing @michkot and @mrazauskas 👍

@SimenB
Copy link
Member

SimenB commented Jan 24, 2023

https://github.com/facebook/jest/releases/tag/v29.4.0

cbush pushed a commit to mongodb/docs-realm that referenced this pull request Feb 15, 2023
<h3>Snyk has created this PR to upgrade multiple dependencies.</h3>
👯 The following dependencies are linked and will therefore be updated
together.
</br></br>
:information_source: Keep your dependencies up-to-date. This makes it
easier to fix existing vulnerabilities and to more quickly identify and
fix newly disclosed vulnerabilities when they affect your project.
</br></br>

 Name         | Versions     | Released on
:-------------|:-------------|:-------------
**babel-jest**</br>from 29.3.1 to 29.4.0 | **1 version** ahead of your
current version | **22 days ago**</br>on 2023-01-24
**jest**</br>from 29.3.1 to 29.4.0 | **1 version** ahead of your current
version | **22 days ago**</br>on 2023-01-24



<details>
<summary><b>Release notes</b></summary>
<br/>
  <details>
    <summary>Package name: <b>babel-jest</b></summary>
    <ul>
      <li>
<b>29.4.0</b> - <a
href="https://snyk.io/redirect/github/facebook/jest/releases/tag/v29.4.0">2023-01-24</a></br><h2>Features</h2>
<ul>
<li><code>[expect, @ jest/expect-utils]</code> Support custom equality
testers (<a
href="https://snyk.io/redirect/github/facebook/jest/pull/13654"
data-hovercard-type="pull_request"
data-hovercard-url="/jestjs/jest/pull/13654/hovercard">#13654</a>)</li>
<li><code>[jest-config, jest-worker]</code> Use
<code>os.availableParallelism</code> if available to calculate number of
workers to spawn (<a
href="https://snyk.io/redirect/github/facebook/jest/pull/13738"
data-hovercard-type="pull_request"
data-hovercard-url="/jestjs/jest/pull/13738/hovercard">#13738</a>)</li>
<li><code>[@ jest/globals, jest-mock]</code> Add
<code>jest.replaceProperty()</code> that replaces property value (<a
href="https://snyk.io/redirect/github/facebook/jest/pull/13496"
data-hovercard-type="pull_request"
data-hovercard-url="/jestjs/jest/pull/13496/hovercard">#13496</a>)</li>
<li><code>[jest-haste-map]</code> ignore Sapling vcs directories
(<code>.sl/</code>) (<a
href="https://snyk.io/redirect/github/facebook/jest/pull/13674"
data-hovercard-type="pull_request"
data-hovercard-url="/jestjs/jest/pull/13674/hovercard">#13674</a>)</li>
<li><code>[jest-resolve]</code> Support subpath imports (<a
href="https://snyk.io/redirect/github/facebook/jest/pull/13705"
data-hovercard-type="pull_request"
data-hovercard-url="/jestjs/jest/pull/13705/hovercard">#13705</a>, <a
href="https://snyk.io/redirect/github/facebook/jest/pull/13723"
data-hovercard-type="pull_request"
data-hovercard-url="/jestjs/jest/pull/13723/hovercard">#13723</a>, <a
href="https://snyk.io/redirect/github/facebook/jest/pull/13777"
data-hovercard-type="pull_request"
data-hovercard-url="/jestjs/jest/pull/13777/hovercard">#13777</a>)</li>
<li><code>[jest-runtime]</code> Add
<code>jest.isolateModulesAsync</code> for scoped module initialization
of asynchronous functions (<a
href="https://snyk.io/redirect/github/facebook/jest/pull/13680"
data-hovercard-type="pull_request"
data-hovercard-url="/jestjs/jest/pull/13680/hovercard">#13680</a>)</li>
<li><code>[jest-runtime]</code> Add
<code>jest.isEnvironmentTornDown</code> function (<a
href="https://snyk.io/redirect/github/facebook/jest/pull/13741"
data-hovercard-type="pull_request"
data-hovercard-url="/jestjs/jest/pull/13741/hovercard">#13741</a>)</li>
<li><code>[jest-test-result]</code> Added <code>skipped</code> and
<code>focused</code> status to <code>FormattedTestResult</code> (<a
href="https://snyk.io/redirect/github/facebook/jest/pull/13700"
data-hovercard-type="pull_request"
data-hovercard-url="/jestjs/jest/pull/13700/hovercard">#13700</a>)</li>
<li><code>[jest-transform]</code> Support for asynchronous
<code>createTransformer</code> (<a
href="https://snyk.io/redirect/github/facebook/jest/pull/13762"
data-hovercard-type="pull_request"
data-hovercard-url="/jestjs/jest/pull/13762/hovercard">#13762</a>)</li>
</ul>
<h2>Fixes</h2>
<ul>
<li><code>[jest-environment-node]</code> Fix non-configurable globals
(<a href="https://snyk.io/redirect/github/facebook/jest/pull/13687"
data-hovercard-type="pull_request"
data-hovercard-url="/jestjs/jest/pull/13687/hovercard">#13687</a>)</li>
<li><code>[@ jest/expect-utils]</code> <code>toMatchObject</code> should
handle <code>Symbol</code> properties (<a
href="https://snyk.io/redirect/github/facebook/jest/pull/13639"
data-hovercard-type="pull_request"
data-hovercard-url="/jestjs/jest/pull/13639/hovercard">#13639</a>)</li>
<li><code>[jest-mock]</code> Fix <code>mockReset</code> and
<code>resetAllMocks</code> <code>undefined</code> return value(<a
href="https://snyk.io/redirect/github/facebook/jest/pull/13692"
data-hovercard-type="pull_request"
data-hovercard-url="/jestjs/jest/pull/13692/hovercard">#13692</a>)</li>
<li><code>[jest-resolve]</code> Add global paths to
<code>require.resolve.paths</code> (<a
href="https://snyk.io/redirect/github/facebook/jest/pull/13633"
data-hovercard-type="pull_request"
data-hovercard-url="/jestjs/jest/pull/13633/hovercard">#13633</a>)</li>
<li><code>[jest-resolve]</code> Correct node core module detection when
using <code>node:</code> specifiers (<a
href="https://snyk.io/redirect/github/facebook/jest/pull/13806"
data-hovercard-type="pull_request"
data-hovercard-url="/jestjs/jest/pull/13806/hovercard">#13806</a>)</li>
<li><code>[jest-runtime]</code> Support WASM files that import JS
resources (<a
href="https://snyk.io/redirect/github/facebook/jest/pull/13608"
data-hovercard-type="pull_request"
data-hovercard-url="/jestjs/jest/pull/13608/hovercard">#13608</a>)</li>
<li><code>[jest-runtime]</code> Use the <code>scriptTransformer</code>
cache in <code>jest-runner</code> (<a
href="https://snyk.io/redirect/github/facebook/jest/pull/13735"
data-hovercard-type="pull_request"
data-hovercard-url="/jestjs/jest/pull/13735/hovercard">#13735</a>)</li>
<li><code>[jest-runtime]</code> Enforce import assertions when importing
JSON in ESM (<a
href="https://snyk.io/redirect/github/facebook/jest/pull/12755"
data-hovercard-type="pull_request"
data-hovercard-url="/jestjs/jest/pull/12755/hovercard">#12755</a>
&amp; <a href="https://snyk.io/redirect/github/facebook/jest/pull/13805"
data-hovercard-type="pull_request"
data-hovercard-url="/jestjs/jest/pull/13805/hovercard">#13805</a>)</li>
<li><code>[jest-snapshot]</code> Make sure to import <code>babel</code>
outside of the sandbox (<a
href="https://snyk.io/redirect/github/facebook/jest/pull/13694"
data-hovercard-type="pull_request"
data-hovercard-url="/jestjs/jest/pull/13694/hovercard">#13694</a>)</li>
<li><code>[jest-transform]</code> Ensure the correct configuration is
passed to preprocessors specified multiple times in the
<code>transform</code> option (<a
href="https://snyk.io/redirect/github/facebook/jest/pull/13770"
data-hovercard-type="pull_request"
data-hovercard-url="/jestjs/jest/pull/13770/hovercard">#13770</a>)</li>
</ul>
<h2>Chore &amp; Maintenance</h2>
<ul>
<li><code>[@ jest/fake-timers]</code> Update <code>@
sinonjs/fake-timers</code> (<a
href="https://snyk.io/redirect/github/facebook/jest/pull/13612"
data-hovercard-type="pull_request"
data-hovercard-url="/jestjs/jest/pull/13612/hovercard">#13612</a>)</li>
<li><code>[docs]</code> Improve custom puppeteer example to prevent
worker warnings (<a
href="https://snyk.io/redirect/github/facebook/jest/pull/13619"
data-hovercard-type="pull_request"
data-hovercard-url="/jestjs/jest/pull/13619/hovercard">#13619</a>)</li>
</ul>
<h2>New Contributors</h2>
<ul>
<li><a class="user-mention notranslate" data-hovercard-type="user"
data-hovercard-url="/users/lvqq/hovercard"
data-octo-click="hovercard-link-click"
data-octo-dimensions="link_type:self"
href="https://snyk.io/redirect/github/lvqq">@ lvqq</a> made their first
contribution in <a aria-label="Pull request #13633" class="issue-link
js-issue-link" data-error-text="Failed to load title"
data-id="1458233845" data-permission-text="Title is private"
data-url="jestjs/jest#13633"
data-hovercard-type="pull_request"
data-hovercard-url="/jestjs/jest/pull/13633/hovercard"
href="https://snyk.io/redirect/github/facebook/jest/pull/13633">#13633</a></li>
<li><a class="user-mention notranslate" data-hovercard-type="user"
data-hovercard-url="/users/zjfresh/hovercard"
data-octo-click="hovercard-link-click"
data-octo-dimensions="link_type:self"
href="https://snyk.io/redirect/github/zjfresh">@ zjfresh</a> made their
first contribution in <a aria-label="Pull request #13682"
class="issue-link js-issue-link" data-error-text="Failed to load title"
data-id="1504316630" data-permission-text="Title is private"
data-url="jestjs/jest#13682"
data-hovercard-type="pull_request"
data-hovercard-url="/jestjs/jest/pull/13682/hovercard"
href="https://snyk.io/redirect/github/facebook/jest/pull/13682">#13682</a></li>
<li><a class="user-mention notranslate" data-hovercard-type="user"
data-hovercard-url="/users/rnwst/hovercard"
data-octo-click="hovercard-link-click"
data-octo-dimensions="link_type:self"
href="https://snyk.io/redirect/github/rnwst">@ rnwst</a> made their
first contribution in <a aria-label="Pull request #13635"
class="issue-link js-issue-link" data-error-text="Failed to load title"
data-id="1460619742" data-permission-text="Title is private"
data-url="jestjs/jest#13635"
data-hovercard-type="pull_request"
data-hovercard-url="/jestjs/jest/pull/13635/hovercard"
href="https://snyk.io/redirect/github/facebook/jest/pull/13635">#13635</a></li>
<li><a class="user-mention notranslate" data-hovercard-type="user"
data-hovercard-url="/users/overlookmotel/hovercard"
data-octo-click="hovercard-link-click"
data-octo-dimensions="link_type:self"
href="https://snyk.io/redirect/github/overlookmotel">@ overlookmotel</a>
made their first contribution in <a aria-label="Pull request #13687"
class="issue-link js-issue-link" data-error-text="Failed to load title"
data-id="1507865711" data-permission-text="Title is private"
data-url="jestjs/jest#13687"
data-hovercard-type="pull_request"
data-hovercard-url="/jestjs/jest/pull/13687/hovercard"
href="https://snyk.io/redirect/github/facebook/jest/pull/13687">#13687</a></li>
<li><a class="user-mention notranslate" data-hovercard-type="user"
data-hovercard-url="/users/mmanciop/hovercard"
data-octo-click="hovercard-link-click"
data-octo-dimensions="link_type:self"
href="https://snyk.io/redirect/github/mmanciop">@ mmanciop</a> made
their first contribution in <a aria-label="Pull request #13680"
class="issue-link js-issue-link" data-error-text="Failed to load title"
data-id="1500954532" data-permission-text="Title is private"
data-url="jestjs/jest#13680"
data-hovercard-type="pull_request"
data-hovercard-url="/jestjs/jest/pull/13680/hovercard"
href="https://snyk.io/redirect/github/facebook/jest/pull/13680">#13680</a></li>
<li><a class="user-mention notranslate" data-hovercard-type="user"
data-hovercard-url="/users/Jeroendevr/hovercard"
data-octo-click="hovercard-link-click"
data-octo-dimensions="link_type:self"
href="https://snyk.io/redirect/github/Jeroendevr">@ Jeroendevr</a> made
their first contribution in <a aria-label="Pull request #13428"
class="issue-link js-issue-link" data-error-text="Failed to load title"
data-id="1404420168" data-permission-text="Title is private"
data-url="jestjs/jest#13428"
data-hovercard-type="pull_request"
data-hovercard-url="/jestjs/jest/pull/13428/hovercard"
href="https://snyk.io/redirect/github/facebook/jest/pull/13428">#13428</a></li>
<li><a class="user-mention notranslate" data-hovercard-type="user"
data-hovercard-url="/users/falsyvalues/hovercard"
data-octo-click="hovercard-link-click"
data-octo-dimensions="link_type:self"
href="https://snyk.io/redirect/github/falsyvalues">@ falsyvalues</a>
made their first contribution in <a aria-label="Pull request #13619"
class="issue-link js-issue-link" data-error-text="Failed to load title"
data-id="1453483771" data-permission-text="Title is private"
data-url="jestjs/jest#13619"
data-hovercard-type="pull_request"
data-hovercard-url="/jestjs/jest/pull/13619/hovercard"
href="https://snyk.io/redirect/github/facebook/jest/pull/13619">#13619</a></li>
<li><a class="user-mention notranslate" data-hovercard-type="user"
data-hovercard-url="/users/vegerot/hovercard"
data-octo-click="hovercard-link-click"
data-octo-dimensions="link_type:self"
href="https://snyk.io/redirect/github/vegerot">@ vegerot</a> made their
first contribution in <a aria-label="Pull request #13674"
class="issue-link js-issue-link" data-error-text="Failed to load title"
data-id="1495407600" data-permission-text="Title is private"
data-url="jestjs/jest#13674"
data-hovercard-type="pull_request"
data-hovercard-url="/jestjs/jest/pull/13674/hovercard"
href="https://snyk.io/redirect/github/facebook/jest/pull/13674">#13674</a></li>
<li><a class="user-mention notranslate" data-hovercard-type="user"
data-hovercard-url="/users/faustAbc/hovercard"
data-octo-click="hovercard-link-click"
data-octo-dimensions="link_type:self"
href="https://snyk.io/redirect/github/faustAbc">@ faustAbc</a> made
their first contribution in <a aria-label="Pull request #13331"
class="issue-link js-issue-link" data-error-text="Failed to load title"
data-id="1389128446" data-permission-text="Title is private"
data-url="jestjs/jest#13331"
data-hovercard-type="pull_request"
data-hovercard-url="/jestjs/jest/pull/13331/hovercard"
href="https://snyk.io/redirect/github/facebook/jest/pull/13331">#13331</a></li>
<li><a class="user-mention notranslate" data-hovercard-type="user"
data-hovercard-url="/users/valentincostam/hovercard"
data-octo-click="hovercard-link-click"
data-octo-dimensions="link_type:self"
href="https://snyk.io/redirect/github/valentincostam">@
valentincostam</a> made their first contribution in <a aria-label="Pull
request #13634" class="issue-link js-issue-link" data-error-text="Failed
to load title" data-id="1458596413" data-permission-text="Title is
private" data-url="jestjs/jest#13634"
data-hovercard-type="pull_request"
data-hovercard-url="/jestjs/jest/pull/13634/hovercard"
href="https://snyk.io/redirect/github/facebook/jest/pull/13634">#13634</a></li>
<li><a class="user-mention notranslate" data-hovercard-type="user"
data-hovercard-url="/users/unional/hovercard"
data-octo-click="hovercard-link-click"
data-octo-dimensions="link_type:self"
href="https://snyk.io/redirect/github/unional">@ unional</a> made their
first contribution in <a aria-label="Pull request #13721"
class="issue-link js-issue-link" data-error-text="Failed to load title"
data-id="1517018945" data-permission-text="Title is private"
data-url="jestjs/jest#13721"
data-hovercard-type="pull_request"
data-hovercard-url="/jestjs/jest/pull/13721/hovercard"
href="https://snyk.io/redirect/github/facebook/jest/pull/13721">#13721</a></li>
<li><a class="user-mention notranslate" data-hovercard-type="user"
data-hovercard-url="/users/andrewiggins/hovercard"
data-octo-click="hovercard-link-click"
data-octo-dimensions="link_type:self"
href="https://snyk.io/redirect/github/andrewiggins">@ andrewiggins</a>
made their first contribution in <a aria-label="Pull request #13654"
class="issue-link js-issue-link" data-error-text="Failed to load title"
data-id="1471979635" data-permission-text="Title is private"
data-url="jestjs/jest#13654"
data-hovercard-type="pull_request"
data-hovercard-url="/jestjs/jest/pull/13654/hovercard"
href="https://snyk.io/redirect/github/facebook/jest/pull/13654">#13654</a></li>
<li><a class="user-mention notranslate" data-hovercard-type="user"
data-hovercard-url="/users/michal-kocarek/hovercard"
data-octo-click="hovercard-link-click"
data-octo-dimensions="link_type:self"
href="https://snyk.io/redirect/github/michal-kocarek">@
michal-kocarek</a> made their first contribution in <a aria-label="Pull
request #13496" class="issue-link js-issue-link" data-error-text="Failed
to load title" data-id="1419944203" data-permission-text="Title is
private" data-url="jestjs/jest#13496"
data-hovercard-type="pull_request"
data-hovercard-url="/jestjs/jest/pull/13496/hovercard"
href="https://snyk.io/redirect/github/facebook/jest/pull/13496">#13496</a></li>
<li><a class="user-mention notranslate" data-hovercard-type="user"
data-hovercard-url="/users/jdufresne/hovercard"
data-octo-click="hovercard-link-click"
data-octo-dimensions="link_type:self"
href="https://snyk.io/redirect/github/jdufresne">@ jdufresne</a> made
their first contribution in <a aria-label="Pull request #13469"
class="issue-link js-issue-link" data-error-text="Failed to load title"
data-id="1413337332" data-permission-text="Title is private"
data-url="jestjs/jest#13469"
data-hovercard-type="pull_request"
data-hovercard-url="/jestjs/jest/pull/13469/hovercard"
href="https://snyk.io/redirect/github/facebook/jest/pull/13469">#13469</a></li>
<li><a class="user-mention notranslate" data-hovercard-type="user"
data-hovercard-url="/users/feliperli/hovercard"
data-octo-click="hovercard-link-click"
data-octo-dimensions="link_type:self"
href="https://snyk.io/redirect/github/feliperli">@ feliperli</a> made
their first contribution in <a aria-label="Pull request #13692"
class="issue-link js-issue-link" data-error-text="Failed to load title"
data-id="1509760101" data-permission-text="Title is private"
data-url="jestjs/jest#13692"
data-hovercard-type="pull_request"
data-hovercard-url="/jestjs/jest/pull/13692/hovercard"
href="https://snyk.io/redirect/github/facebook/jest/pull/13692">#13692</a></li>
<li><a class="user-mention notranslate" data-hovercard-type="user"
data-hovercard-url="/users/bob-zs/hovercard"
data-octo-click="hovercard-link-click"
data-octo-dimensions="link_type:self"
href="https://snyk.io/redirect/github/bob-zs">@ bob-zs</a> made their
first contribution in <a aria-label="Pull request #13740"
class="issue-link js-issue-link" data-error-text="Failed to load title"
data-id="1523436837" data-permission-text="Title is private"
data-url="jestjs/jest#13740"
data-hovercard-type="pull_request"
data-hovercard-url="/jestjs/jest/pull/13740/hovercard"
href="https://snyk.io/redirect/github/facebook/jest/pull/13740">#13740</a></li>
<li><a class="user-mention notranslate" data-hovercard-type="user"
data-hovercard-url="/users/MasterOdin/hovercard"
data-octo-click="hovercard-link-click"
data-octo-dimensions="link_type:self"
href="https://snyk.io/redirect/github/MasterOdin">@ MasterOdin</a> made
their first contribution in <a aria-label="Pull request #13743"
class="issue-link js-issue-link" data-error-text="Failed to load title"
data-id="1524525830" data-permission-text="Title is private"
data-url="jestjs/jest#13743"
data-hovercard-type="pull_request"
data-hovercard-url="/jestjs/jest/pull/13743/hovercard"
href="https://snyk.io/redirect/github/facebook/jest/pull/13743">#13743</a></li>
<li><a class="user-mention notranslate" data-hovercard-type="user"
data-hovercard-url="/users/kalyncoose/hovercard"
data-octo-click="hovercard-link-click"
data-octo-dimensions="link_type:self"
href="https://snyk.io/redirect/github/kalyncoose">@ kalyncoose</a> made
their first contribution in <a aria-label="Pull request #13746"
class="issue-link js-issue-link" data-error-text="Failed to load title"
data-id="1525575221" data-permission-text="Title is private"
data-url="jestjs/jest#13746"
data-hovercard-type="pull_request"
data-hovercard-url="/jestjs/jest/pull/13746/hovercard"
href="https://snyk.io/redirect/github/facebook/jest/pull/13746">#13746</a></li>
<li><a class="user-mention notranslate" data-hovercard-type="user"
data-hovercard-url="/users/arash-hacker/hovercard"
data-octo-click="hovercard-link-click"
data-octo-dimensions="link_type:self"
href="https://snyk.io/redirect/github/arash-hacker">@ arash-hacker</a>
made their first contribution in <a aria-label="Pull request #13747"
class="issue-link js-issue-link" data-error-text="Failed to load title"
data-id="1526515649" data-permission-text="Title is private"
data-url="jestjs/jest#13747"
data-hovercard-type="pull_request"
data-hovercard-url="/jestjs/jest/pull/13747/hovercard"
href="https://snyk.io/redirect/github/facebook/jest/pull/13747">#13747</a></li>
<li><a class="user-mention notranslate" data-hovercard-type="user"
data-hovercard-url="/users/jomendez/hovercard"
data-octo-click="hovercard-link-click"
data-octo-dimensions="link_type:self"
href="https://snyk.io/redirect/github/jomendez">@ jomendez</a> made
their first contribution in <a aria-label="Pull request #13741"
class="issue-link js-issue-link" data-error-text="Failed to load title"
data-id="1523457981" data-permission-text="Title is private"
data-url="jestjs/jest#13741"
data-hovercard-type="pull_request"
data-hovercard-url="/jestjs/jest/pull/13741/hovercard"
href="https://snyk.io/redirect/github/facebook/jest/pull/13741">#13741</a></li>
<li><a class="user-mention notranslate" data-hovercard-type="user"
data-hovercard-url="/users/coffeebeats/hovercard"
data-octo-click="hovercard-link-click"
data-octo-dimensions="link_type:self"
href="https://snyk.io/redirect/github/coffeebeats">@ coffeebeats</a>
made their first contribution in <a aria-label="Pull request #13770"
class="issue-link js-issue-link" data-error-text="Failed to load title"
data-id="1533108122" data-permission-text="Title is private"
data-url="jestjs/jest#13770"
data-hovercard-type="pull_request"
data-hovercard-url="/jestjs/jest/pull/13770/hovercard"
href="https://snyk.io/redirect/github/facebook/jest/pull/13770">#13770</a></li>
<li><a class="user-mention notranslate" data-hovercard-type="user"
data-hovercard-url="/users/lachrist/hovercard"
data-octo-click="hovercard-link-click"
data-octo-dimensions="link_type:self"
href="https://snyk.io/redirect/github/lachrist">@ lachrist</a> made
their first contribution in <a aria-label="Pull request #13762"
class="issue-link js-issue-link" data-error-text="Failed to load title"
data-id="1531083529" data-permission-text="Title is private"
data-url="jestjs/jest#13762"
data-hovercard-type="pull_request"
data-hovercard-url="/jestjs/jest/pull/13762/hovercard"
href="https://snyk.io/redirect/github/facebook/jest/pull/13762">#13762</a></li>
<li><a class="user-mention notranslate" data-hovercard-type="user"
data-hovercard-url="/users/lukeed/hovercard"
data-octo-click="hovercard-link-click"
data-octo-dimensions="link_type:self"
href="https://snyk.io/redirect/github/lukeed">@ lukeed</a> made their
first contribution in <a aria-label="Pull request #13777"
class="issue-link js-issue-link" data-error-text="Failed to load title"
data-id="1535564063" data-permission-text="Title is private"
data-url="jestjs/jest#13777"
data-hovercard-type="pull_request"
data-hovercard-url="/jestjs/jest/pull/13777/hovercard"
href="https://snyk.io/redirect/github/facebook/jest/pull/13777">#13777</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a class="commit-link"
href="https://snyk.io/redirect/github/facebook/jest/compare/v29.3.1...v29.4.0"><tt>v29.3.1...v29.4.0</tt></a></p>
      </li>
      <li>
<b>29.3.1</b> - <a
href="https://snyk.io/redirect/github/facebook/jest/releases/tag/v29.3.1">2022-11-08</a></br><h2>Fixes</h2>
<ul>
<li><code>[jest-config]</code> Do not warn about <code>preset</code> in
<code>ProjectConfig</code> (<a
href="https://snyk.io/redirect/github/facebook/jest/pull/13583"
data-hovercard-type="pull_request"
data-hovercard-url="/jestjs/jest/pull/13583/hovercard">#13583</a>)</li>
</ul>
<h2>Performance</h2>
<ul>
<li><code>[jest-transform]</code> Defer creation of cache directory (<a
href="https://snyk.io/redirect/github/facebook/jest/pull/13420"
data-hovercard-type="pull_request"
data-hovercard-url="/jestjs/jest/pull/13420/hovercard">#13420</a>)</li>
</ul>
      </li>
    </ul>
from <a
href="https://snyk.io/redirect/github/facebook/jest/releases">babel-jest
GitHub release notes</a>
  </details>
  <details>
    <summary>Package name: <b>jest</b></summary>
    <ul>
      <li>
<b>29.4.0</b> - <a
href="https://snyk.io/redirect/github/facebook/jest/releases/tag/v29.4.0">2023-01-24</a></br><a
href="https://snyk.io/redirect/github/facebook/jest/releases/tag/v29.4.0">
Read more </a>
      </li>
      <li>
<b>29.3.1</b> - <a
href="https://snyk.io/redirect/github/facebook/jest/releases/tag/v29.3.1">2022-11-08</a></br><h2>Fixes</h2>
<ul>
<li><code>[jest-config]</code> Do not warn about <code>preset</code> in
<code>ProjectConfig</code> (<a
href="https://snyk.io/redirect/github/facebook/jest/pull/13583"
data-hovercard-type="pull_request"
data-hovercard-url="/jestjs/jest/pull/13583/hovercard">#13583</a>)</li>
</ul>
<h2>Performance</h2>
<ul>
<li><code>[jest-transform]</code> Defer creation of cache directory (<a
href="https://snyk.io/redirect/github/facebook/jest/pull/13420"
data-hovercard-type="pull_request"
data-hovercard-url="/jestjs/jest/pull/13420/hovercard">#13420</a>)</li>
</ul>
      </li>
    </ul>
from <a
href="https://snyk.io/redirect/github/facebook/jest/releases">jest
GitHub release notes</a>
  </details>
</details>


<details>
  <summary><b>Commit messages</b></summary>
  </br>
  <details>
    <summary>Package name: <b>babel-jest</b></summary>
    <ul>
<li><a
href="https://snyk.io/redirect/github/facebook/jest/commit/4bc0e8acaf990e6618a7bed1dca67760c20bb12a">4bc0e8a</a>
v29.4.0</li>
<li><a
href="https://snyk.io/redirect/github/facebook/jest/commit/00112db41f2fa72b2a71415ec2270b568de72957">00112db</a>
chore: update changelog for release</li>
<li><a
href="https://snyk.io/redirect/github/facebook/jest/commit/a875150110b0ce35844a61c7797815c6716c1601">a875150</a>
docs: roll new version</li>
<li><a
href="https://snyk.io/redirect/github/facebook/jest/commit/7626da9e5e18a61ebc3b2a3f74e7116962243ee3">7626da9</a>
fix(resolve): remove faulty check for &#x60;node:&#x60; modules
(#13806)</li>
<li><a
href="https://snyk.io/redirect/github/facebook/jest/commit/b40429649d5e673eb5c572db8a5cfd1218320a40">b404296</a>
chore: add validation of import assertions (#13805)</li>
<li><a
href="https://snyk.io/redirect/github/facebook/jest/commit/6f8e91804b5515a64d1baf439bc1d84ee0ea61cd">6f8e918</a>
fix: enforce import assertions when importing JSON in ESM (#12755)</li>
<li><a
href="https://snyk.io/redirect/github/facebook/jest/commit/e0b12497c9953c633023a414d57ba92db0bc61ae">e0b1249</a>
chore: update babel-plugin-tester (#13804)</li>
<li><a
href="https://snyk.io/redirect/github/facebook/jest/commit/b9282e197294f498f9995d73d242c3e407f7a10e">b9282e1</a>
chore: refresh lockfile (#13798)</li>
<li><a
href="https://snyk.io/redirect/github/facebook/jest/commit/56f14544d5dc9b0e0772357b108de3da3c149ac4">56f1454</a>
docs: restructure the Expect API page (#13791)</li>
<li><a
href="https://snyk.io/redirect/github/facebook/jest/commit/26661e2f9873c7c0bbc0612c423840d84df168e8">26661e2</a>
chore(stale-action): leave PRs with Pinned label alone</li>
<li><a
href="https://snyk.io/redirect/github/facebook/jest/commit/63bf909da19c04c300bdcbd6555598f6588a73d0">63bf909</a>
docs: clean up &#x60;expect.extend&#x60; documentation (#13788)</li>
<li><a
href="https://snyk.io/redirect/github/facebook/jest/commit/ea5e47e28d619828048f2dce6c015b8b77c4f6fb">ea5e47e</a>
refactor(resolve): use &#x60;resolve.exports&#x60; for
&#x60;imports&#x60; (#13777)</li>
<li><a
href="https://snyk.io/redirect/github/facebook/jest/commit/8ef8c20dc6489da758d1f32100e70b07ff4df13d">8ef8c20</a>
docs: add documentation of the &#x60;jest.deepUnmock()&#x60; method
(#13774)</li>
<li><a
href="https://snyk.io/redirect/github/facebook/jest/commit/c010e3597dbd021d7fe88060ecbe282fe29a8d3d">c010e35</a>
refactor(@ jest/environment): keep alphabetic order in the
&#x60;Jest&#x60; interface (#13773)</li>
<li><a
href="https://snyk.io/redirect/github/facebook/jest/commit/9ebb37378ffe3a03c3dfa2bac9ec9ed27c6b3339">9ebb373</a>
docs: fix one of &#x60;mockFn.mockImplementation()&#x60; TS examples
(#13775)</li>
<li><a
href="https://snyk.io/redirect/github/facebook/jest/commit/86f3c8937503d5bded0f936e671f51ec77022f2e">86f3c89</a>
feat: support async createTransformer (#13762)</li>
<li><a
href="https://snyk.io/redirect/github/facebook/jest/commit/2993a4f4845c0bebafb7cac95ae751615272f16c">2993a4f</a>
docs: fix various grammatical errors (#13768)</li>
<li><a
href="https://snyk.io/redirect/github/facebook/jest/commit/49204ac6e06ecc53d4ebf45feab4c01da7756aec">49204ac</a>
fix(jest-transform): ensure correct config is passed to preprocessors
specified multiple times in &#x60;transform&#x60; (#13770)</li>
<li><a
href="https://snyk.io/redirect/github/facebook/jest/commit/928f6ccec5fdb92ef157d6df832444d989c6b17b">928f6cc</a>
docs: add entry for isEnvironmentTornDown</li>
<li><a
href="https://snyk.io/redirect/github/facebook/jest/commit/73d7c1de78f9e48c03b770257c3e7fa962bb6a2e">73d7c1d</a>
feat(jest-runtime): expose isEnvironmentTornDown variable (#13741)</li>
<li><a
href="https://snyk.io/redirect/github/facebook/jest/commit/7b33879aa6b07f9d8887b2f37e302ac60d6ec7bc">7b33879</a>
docs: add &quot;shorthand for&quot; notes in Mock Function API
documentation (#13771)</li>
<li><a
href="https://snyk.io/redirect/github/facebook/jest/commit/1a97aa6df02aab558319067ed3f3af1178c7419d">1a97aa6</a>
chore: update resolve.exports for bug fixes</li>
<li><a
href="https://snyk.io/redirect/github/facebook/jest/commit/601ba290cd3c456c433461326df4c98dd4d07161">601ba29</a>
Fix grammatical error in GlobalAPI.md (#13752)</li>
<li><a
href="https://snyk.io/redirect/github/facebook/jest/commit/eca83e7221137785d585215f9ae9251adcdbacc3">eca83e7</a>
Add preposition &#x27;on&#x27; after verb &#x27;spy&#x27; in error msgs
and docs (#13767)</li>
    </ul>

<a
href="https://snyk.io/redirect/github/facebook/jest/compare/05deb8393c4ad71e19be2567b704dfd3a2ab5fc9...4bc0e8acaf990e6618a7bed1dca67760c20bb12a">Compare</a>
  </details>
  <details>
    <summary>Package name: <b>jest</b></summary>
    <ul>
<li><a
href="https://snyk.io/redirect/github/facebook/jest/commit/4bc0e8acaf990e6618a7bed1dca67760c20bb12a">4bc0e8a</a>
v29.4.0</li>
<li><a
href="https://snyk.io/redirect/github/facebook/jest/commit/00112db41f2fa72b2a71415ec2270b568de72957">00112db</a>
chore: update changelog for release</li>
<li><a
href="https://snyk.io/redirect/github/facebook/jest/commit/a875150110b0ce35844a61c7797815c6716c1601">a875150</a>
docs: roll new version</li>
<li><a
href="https://snyk.io/redirect/github/facebook/jest/commit/7626da9e5e18a61ebc3b2a3f74e7116962243ee3">7626da9</a>
fix(resolve): remove faulty check for &#x60;node:&#x60; modules
(#13806)</li>
<li><a
href="https://snyk.io/redirect/github/facebook/jest/commit/b40429649d5e673eb5c572db8a5cfd1218320a40">b404296</a>
chore: add validation of import assertions (#13805)</li>
<li><a
href="https://snyk.io/redirect/github/facebook/jest/commit/6f8e91804b5515a64d1baf439bc1d84ee0ea61cd">6f8e918</a>
fix: enforce import assertions when importing JSON in ESM (#12755)</li>
<li><a
href="https://snyk.io/redirect/github/facebook/jest/commit/e0b12497c9953c633023a414d57ba92db0bc61ae">e0b1249</a>
chore: update babel-plugin-tester (#13804)</li>
<li><a
href="https://snyk.io/redirect/github/facebook/jest/commit/b9282e197294f498f9995d73d242c3e407f7a10e">b9282e1</a>
chore: refresh lockfile (#13798)</li>
<li><a
href="https://snyk.io/redirect/github/facebook/jest/commit/56f14544d5dc9b0e0772357b108de3da3c149ac4">56f1454</a>
docs: restructure the Expect API page (#13791)</li>
<li><a
href="https://snyk.io/redirect/github/facebook/jest/commit/26661e2f9873c7c0bbc0612c423840d84df168e8">26661e2</a>
chore(stale-action): leave PRs with Pinned label alone</li>
<li><a
href="https://snyk.io/redirect/github/facebook/jest/commit/63bf909da19c04c300bdcbd6555598f6588a73d0">63bf909</a>
docs: clean up &#x60;expect.extend&#x60; documentation (#13788)</li>
<li><a
href="https://snyk.io/redirect/github/facebook/jest/commit/ea5e47e28d619828048f2dce6c015b8b77c4f6fb">ea5e47e</a>
refactor(resolve): use &#x60;resolve.exports&#x60; for
&#x60;imports&#x60; (#13777)</li>
<li><a
href="https://snyk.io/redirect/github/facebook/jest/commit/8ef8c20dc6489da758d1f32100e70b07ff4df13d">8ef8c20</a>
docs: add documentation of the &#x60;jest.deepUnmock()&#x60; method
(#13774)</li>
<li><a
href="https://snyk.io/redirect/github/facebook/jest/commit/c010e3597dbd021d7fe88060ecbe282fe29a8d3d">c010e35</a>
refactor(@ jest/environment): keep alphabetic order in the
&#x60;Jest&#x60; interface (#13773)</li>
<li><a
href="https://snyk.io/redirect/github/facebook/jest/commit/9ebb37378ffe3a03c3dfa2bac9ec9ed27c6b3339">9ebb373</a>
docs: fix one of &#x60;mockFn.mockImplementation()&#x60; TS examples
(#13775)</li>
<li><a
href="https://snyk.io/redirect/github/facebook/jest/commit/86f3c8937503d5bded0f936e671f51ec77022f2e">86f3c89</a>
feat: support async createTransformer (#13762)</li>
<li><a
href="https://snyk.io/redirect/github/facebook/jest/commit/2993a4f4845c0bebafb7cac95ae751615272f16c">2993a4f</a>
docs: fix various grammatical errors (#13768)</li>
<li><a
href="https://snyk.io/redirect/github/facebook/jest/commit/49204ac6e06ecc53d4ebf45feab4c01da7756aec">49204ac</a>
fix(jest-transform): ensure correct config is passed to preprocessors
specified multiple times in &#x60;transform&#x60; (#13770)</li>
<li><a
href="https://snyk.io/redirect/github/facebook/jest/commit/928f6ccec5fdb92ef157d6df832444d989c6b17b">928f6cc</a>
docs: add entry for isEnvironmentTornDown</li>
<li><a
href="https://snyk.io/redirect/github/facebook/jest/commit/73d7c1de78f9e48c03b770257c3e7fa962bb6a2e">73d7c1d</a>
feat(jest-runtime): expose isEnvironmentTornDown variable (#13741)</li>
<li><a
href="https://snyk.io/redirect/github/facebook/jest/commit/7b33879aa6b07f9d8887b2f37e302ac60d6ec7bc">7b33879</a>
docs: add &quot;shorthand for&quot; notes in Mock Function API
documentation (#13771)</li>
<li><a
href="https://snyk.io/redirect/github/facebook/jest/commit/1a97aa6df02aab558319067ed3f3af1178c7419d">1a97aa6</a>
chore: update resolve.exports for bug fixes</li>
<li><a
href="https://snyk.io/redirect/github/facebook/jest/commit/601ba290cd3c456c433461326df4c98dd4d07161">601ba29</a>
Fix grammatical error in GlobalAPI.md (#13752)</li>
<li><a
href="https://snyk.io/redirect/github/facebook/jest/commit/eca83e7221137785d585215f9ae9251adcdbacc3">eca83e7</a>
Add preposition &#x27;on&#x27; after verb &#x27;spy&#x27; in error msgs
and docs (#13767)</li>
    </ul>

<a
href="https://snyk.io/redirect/github/facebook/jest/compare/05deb8393c4ad71e19be2567b704dfd3a2ab5fc9...4bc0e8acaf990e6618a7bed1dca67760c20bb12a">Compare</a>
  </details>
</details>
<hr/>

**Note:** *You are seeing this because you or someone else with access
to this repository has authorized Snyk to open upgrade PRs.*

For more information: <img
src="https://api.segment.io/v1/pixel/track?data=eyJ3cml0ZUtleSI6InJyWmxZcEdHY2RyTHZsb0lYd0dUcVg4WkFRTnNCOUEwIiwiYW5vbnltb3VzSWQiOiJkM2ZlYTczOC1kMDZkLTRmMTYtYjc5MS03ODdiZWIxYjI4ZTkiLCJldmVudCI6IlBSIHZpZXdlZCIsInByb3BlcnRpZXMiOnsicHJJZCI6ImQzZmVhNzM4LWQwNmQtNGYxNi1iNzkxLTc4N2JlYjFiMjhlOSJ9fQ=="
width="0" height="0"/>

🧐 [View latest project
report](https://app.snyk.io/org/sandbox-2ba/project/852e6e4f-be96-45c8-b370-1060f5ebee55?utm_source&#x3D;github&amp;utm_medium&#x3D;referral&amp;page&#x3D;upgrade-pr)

🛠 [Adjust upgrade PR
settings](https://app.snyk.io/org/sandbox-2ba/project/852e6e4f-be96-45c8-b370-1060f5ebee55/settings/integration?utm_source&#x3D;github&amp;utm_medium&#x3D;referral&amp;page&#x3D;upgrade-pr)

🔕 [Ignore this dependency or unsubscribe from future upgrade
PRs](https://app.snyk.io/org/sandbox-2ba/project/852e6e4f-be96-45c8-b370-1060f5ebee55/settings/integration?pkg&#x3D;babel-jest&amp;pkg&#x3D;jest&amp;utm_source&#x3D;github&amp;utm_medium&#x3D;referral&amp;page&#x3D;upgrade-pr#auto-dep-upgrades)

<!---
(snyk:metadata:{"prId":"d3fea738-d06d-4f16-b791-787beb1b28e9","prPublicId":"d3fea738-d06d-4f16-b791-787beb1b28e9","dependencies":[{"name":"babel-jest","from":"29.3.1","to":"29.4.0"},{"name":"jest","from":"29.3.1","to":"29.4.0"}],"packageManager":"npm","type":"auto","projectUrl":"https://app.snyk.io/org/sandbox-2ba/project/852e6e4f-be96-45c8-b370-1060f5ebee55?utm_source=github&utm_medium=referral&page=upgrade-pr","projectPublicId":"852e6e4f-be96-45c8-b370-1060f5ebee55","env":"prod","prType":"upgrade","vulns":[],"issuesToFix":[],"upgrade":[],"upgradeInfo":{"versionsDiff":1,"publishedDate":"2023-01-24T10:56:00.839Z"},"templateVariants":[],"hasFixes":false,"isMajorUpgrade":false,"isBreakingChange":false,"priorityScoreList":[]})
--->

---------

Co-authored-by: snyk-bot <snyk-bot@snyk.io>
cbullinger pushed a commit to cbullinger/docs-realm that referenced this pull request Feb 16, 2023
<h3>Snyk has created this PR to upgrade multiple dependencies.</h3>
👯 The following dependencies are linked and will therefore be updated
together.
</br></br>
:information_source: Keep your dependencies up-to-date. This makes it
easier to fix existing vulnerabilities and to more quickly identify and
fix newly disclosed vulnerabilities when they affect your project.
</br></br>

 Name         | Versions     | Released on
:-------------|:-------------|:-------------
**babel-jest**</br>from 29.3.1 to 29.4.0 | **1 version** ahead of your
current version | **22 days ago**</br>on 2023-01-24
**jest**</br>from 29.3.1 to 29.4.0 | **1 version** ahead of your current
version | **22 days ago**</br>on 2023-01-24



<details>
<summary><b>Release notes</b></summary>
<br/>
  <details>
    <summary>Package name: <b>babel-jest</b></summary>
    <ul>
      <li>
<b>29.4.0</b> - <a
href="https://snyk.io/redirect/github/facebook/jest/releases/tag/v29.4.0">2023-01-24</a></br><h2>Features</h2>
<ul>
<li><code>[expect, @ jest/expect-utils]</code> Support custom equality
testers (<a
href="https://snyk.io/redirect/github/facebook/jest/pull/13654"
data-hovercard-type="pull_request"
data-hovercard-url="/jestjs/jest/pull/13654/hovercard">#13654</a>)</li>
<li><code>[jest-config, jest-worker]</code> Use
<code>os.availableParallelism</code> if available to calculate number of
workers to spawn (<a
href="https://snyk.io/redirect/github/facebook/jest/pull/13738"
data-hovercard-type="pull_request"
data-hovercard-url="/jestjs/jest/pull/13738/hovercard">#13738</a>)</li>
<li><code>[@ jest/globals, jest-mock]</code> Add
<code>jest.replaceProperty()</code> that replaces property value (<a
href="https://snyk.io/redirect/github/facebook/jest/pull/13496"
data-hovercard-type="pull_request"
data-hovercard-url="/jestjs/jest/pull/13496/hovercard">#13496</a>)</li>
<li><code>[jest-haste-map]</code> ignore Sapling vcs directories
(<code>.sl/</code>) (<a
href="https://snyk.io/redirect/github/facebook/jest/pull/13674"
data-hovercard-type="pull_request"
data-hovercard-url="/jestjs/jest/pull/13674/hovercard">#13674</a>)</li>
<li><code>[jest-resolve]</code> Support subpath imports (<a
href="https://snyk.io/redirect/github/facebook/jest/pull/13705"
data-hovercard-type="pull_request"
data-hovercard-url="/jestjs/jest/pull/13705/hovercard">#13705</a>, <a
href="https://snyk.io/redirect/github/facebook/jest/pull/13723"
data-hovercard-type="pull_request"
data-hovercard-url="/jestjs/jest/pull/13723/hovercard">#13723</a>, <a
href="https://snyk.io/redirect/github/facebook/jest/pull/13777"
data-hovercard-type="pull_request"
data-hovercard-url="/jestjs/jest/pull/13777/hovercard">#13777</a>)</li>
<li><code>[jest-runtime]</code> Add
<code>jest.isolateModulesAsync</code> for scoped module initialization
of asynchronous functions (<a
href="https://snyk.io/redirect/github/facebook/jest/pull/13680"
data-hovercard-type="pull_request"
data-hovercard-url="/jestjs/jest/pull/13680/hovercard">#13680</a>)</li>
<li><code>[jest-runtime]</code> Add
<code>jest.isEnvironmentTornDown</code> function (<a
href="https://snyk.io/redirect/github/facebook/jest/pull/13741"
data-hovercard-type="pull_request"
data-hovercard-url="/jestjs/jest/pull/13741/hovercard">#13741</a>)</li>
<li><code>[jest-test-result]</code> Added <code>skipped</code> and
<code>focused</code> status to <code>FormattedTestResult</code> (<a
href="https://snyk.io/redirect/github/facebook/jest/pull/13700"
data-hovercard-type="pull_request"
data-hovercard-url="/jestjs/jest/pull/13700/hovercard">#13700</a>)</li>
<li><code>[jest-transform]</code> Support for asynchronous
<code>createTransformer</code> (<a
href="https://snyk.io/redirect/github/facebook/jest/pull/13762"
data-hovercard-type="pull_request"
data-hovercard-url="/jestjs/jest/pull/13762/hovercard">#13762</a>)</li>
</ul>
<h2>Fixes</h2>
<ul>
<li><code>[jest-environment-node]</code> Fix non-configurable globals
(<a href="https://snyk.io/redirect/github/facebook/jest/pull/13687"
data-hovercard-type="pull_request"
data-hovercard-url="/jestjs/jest/pull/13687/hovercard">#13687</a>)</li>
<li><code>[@ jest/expect-utils]</code> <code>toMatchObject</code> should
handle <code>Symbol</code> properties (<a
href="https://snyk.io/redirect/github/facebook/jest/pull/13639"
data-hovercard-type="pull_request"
data-hovercard-url="/jestjs/jest/pull/13639/hovercard">#13639</a>)</li>
<li><code>[jest-mock]</code> Fix <code>mockReset</code> and
<code>resetAllMocks</code> <code>undefined</code> return value(<a
href="https://snyk.io/redirect/github/facebook/jest/pull/13692"
data-hovercard-type="pull_request"
data-hovercard-url="/jestjs/jest/pull/13692/hovercard">#13692</a>)</li>
<li><code>[jest-resolve]</code> Add global paths to
<code>require.resolve.paths</code> (<a
href="https://snyk.io/redirect/github/facebook/jest/pull/13633"
data-hovercard-type="pull_request"
data-hovercard-url="/jestjs/jest/pull/13633/hovercard">#13633</a>)</li>
<li><code>[jest-resolve]</code> Correct node core module detection when
using <code>node:</code> specifiers (<a
href="https://snyk.io/redirect/github/facebook/jest/pull/13806"
data-hovercard-type="pull_request"
data-hovercard-url="/jestjs/jest/pull/13806/hovercard">#13806</a>)</li>
<li><code>[jest-runtime]</code> Support WASM files that import JS
resources (<a
href="https://snyk.io/redirect/github/facebook/jest/pull/13608"
data-hovercard-type="pull_request"
data-hovercard-url="/jestjs/jest/pull/13608/hovercard">#13608</a>)</li>
<li><code>[jest-runtime]</code> Use the <code>scriptTransformer</code>
cache in <code>jest-runner</code> (<a
href="https://snyk.io/redirect/github/facebook/jest/pull/13735"
data-hovercard-type="pull_request"
data-hovercard-url="/jestjs/jest/pull/13735/hovercard">#13735</a>)</li>
<li><code>[jest-runtime]</code> Enforce import assertions when importing
JSON in ESM (<a
href="https://snyk.io/redirect/github/facebook/jest/pull/12755"
data-hovercard-type="pull_request"
data-hovercard-url="/jestjs/jest/pull/12755/hovercard">#12755</a>
&amp; <a href="https://snyk.io/redirect/github/facebook/jest/pull/13805"
data-hovercard-type="pull_request"
data-hovercard-url="/jestjs/jest/pull/13805/hovercard">#13805</a>)</li>
<li><code>[jest-snapshot]</code> Make sure to import <code>babel</code>
outside of the sandbox (<a
href="https://snyk.io/redirect/github/facebook/jest/pull/13694"
data-hovercard-type="pull_request"
data-hovercard-url="/jestjs/jest/pull/13694/hovercard">#13694</a>)</li>
<li><code>[jest-transform]</code> Ensure the correct configuration is
passed to preprocessors specified multiple times in the
<code>transform</code> option (<a
href="https://snyk.io/redirect/github/facebook/jest/pull/13770"
data-hovercard-type="pull_request"
data-hovercard-url="/jestjs/jest/pull/13770/hovercard">#13770</a>)</li>
</ul>
<h2>Chore &amp; Maintenance</h2>
<ul>
<li><code>[@ jest/fake-timers]</code> Update <code>@
sinonjs/fake-timers</code> (<a
href="https://snyk.io/redirect/github/facebook/jest/pull/13612"
data-hovercard-type="pull_request"
data-hovercard-url="/jestjs/jest/pull/13612/hovercard">#13612</a>)</li>
<li><code>[docs]</code> Improve custom puppeteer example to prevent
worker warnings (<a
href="https://snyk.io/redirect/github/facebook/jest/pull/13619"
data-hovercard-type="pull_request"
data-hovercard-url="/jestjs/jest/pull/13619/hovercard">#13619</a>)</li>
</ul>
<h2>New Contributors</h2>
<ul>
<li><a class="user-mention notranslate" data-hovercard-type="user"
data-hovercard-url="/users/lvqq/hovercard"
data-octo-click="hovercard-link-click"
data-octo-dimensions="link_type:self"
href="https://snyk.io/redirect/github/lvqq">@ lvqq</a> made their first
contribution in <a aria-label="Pull request #13633" class="issue-link
js-issue-link" data-error-text="Failed to load title"
data-id="1458233845" data-permission-text="Title is private"
data-url="jestjs/jest#13633"
data-hovercard-type="pull_request"
data-hovercard-url="/jestjs/jest/pull/13633/hovercard"
href="https://snyk.io/redirect/github/facebook/jest/pull/13633">#13633</a></li>
<li><a class="user-mention notranslate" data-hovercard-type="user"
data-hovercard-url="/users/zjfresh/hovercard"
data-octo-click="hovercard-link-click"
data-octo-dimensions="link_type:self"
href="https://snyk.io/redirect/github/zjfresh">@ zjfresh</a> made their
first contribution in <a aria-label="Pull request #13682"
class="issue-link js-issue-link" data-error-text="Failed to load title"
data-id="1504316630" data-permission-text="Title is private"
data-url="jestjs/jest#13682"
data-hovercard-type="pull_request"
data-hovercard-url="/jestjs/jest/pull/13682/hovercard"
href="https://snyk.io/redirect/github/facebook/jest/pull/13682">#13682</a></li>
<li><a class="user-mention notranslate" data-hovercard-type="user"
data-hovercard-url="/users/rnwst/hovercard"
data-octo-click="hovercard-link-click"
data-octo-dimensions="link_type:self"
href="https://snyk.io/redirect/github/rnwst">@ rnwst</a> made their
first contribution in <a aria-label="Pull request #13635"
class="issue-link js-issue-link" data-error-text="Failed to load title"
data-id="1460619742" data-permission-text="Title is private"
data-url="jestjs/jest#13635"
data-hovercard-type="pull_request"
data-hovercard-url="/jestjs/jest/pull/13635/hovercard"
href="https://snyk.io/redirect/github/facebook/jest/pull/13635">#13635</a></li>
<li><a class="user-mention notranslate" data-hovercard-type="user"
data-hovercard-url="/users/overlookmotel/hovercard"
data-octo-click="hovercard-link-click"
data-octo-dimensions="link_type:self"
href="https://snyk.io/redirect/github/overlookmotel">@ overlookmotel</a>
made their first contribution in <a aria-label="Pull request #13687"
class="issue-link js-issue-link" data-error-text="Failed to load title"
data-id="1507865711" data-permission-text="Title is private"
data-url="jestjs/jest#13687"
data-hovercard-type="pull_request"
data-hovercard-url="/jestjs/jest/pull/13687/hovercard"
href="https://snyk.io/redirect/github/facebook/jest/pull/13687">#13687</a></li>
<li><a class="user-mention notranslate" data-hovercard-type="user"
data-hovercard-url="/users/mmanciop/hovercard"
data-octo-click="hovercard-link-click"
data-octo-dimensions="link_type:self"
href="https://snyk.io/redirect/github/mmanciop">@ mmanciop</a> made
their first contribution in <a aria-label="Pull request #13680"
class="issue-link js-issue-link" data-error-text="Failed to load title"
data-id="1500954532" data-permission-text="Title is private"
data-url="jestjs/jest#13680"
data-hovercard-type="pull_request"
data-hovercard-url="/jestjs/jest/pull/13680/hovercard"
href="https://snyk.io/redirect/github/facebook/jest/pull/13680">#13680</a></li>
<li><a class="user-mention notranslate" data-hovercard-type="user"
data-hovercard-url="/users/Jeroendevr/hovercard"
data-octo-click="hovercard-link-click"
data-octo-dimensions="link_type:self"
href="https://snyk.io/redirect/github/Jeroendevr">@ Jeroendevr</a> made
their first contribution in <a aria-label="Pull request #13428"
class="issue-link js-issue-link" data-error-text="Failed to load title"
data-id="1404420168" data-permission-text="Title is private"
data-url="jestjs/jest#13428"
data-hovercard-type="pull_request"
data-hovercard-url="/jestjs/jest/pull/13428/hovercard"
href="https://snyk.io/redirect/github/facebook/jest/pull/13428">#13428</a></li>
<li><a class="user-mention notranslate" data-hovercard-type="user"
data-hovercard-url="/users/falsyvalues/hovercard"
data-octo-click="hovercard-link-click"
data-octo-dimensions="link_type:self"
href="https://snyk.io/redirect/github/falsyvalues">@ falsyvalues</a>
made their first contribution in <a aria-label="Pull request #13619"
class="issue-link js-issue-link" data-error-text="Failed to load title"
data-id="1453483771" data-permission-text="Title is private"
data-url="jestjs/jest#13619"
data-hovercard-type="pull_request"
data-hovercard-url="/jestjs/jest/pull/13619/hovercard"
href="https://snyk.io/redirect/github/facebook/jest/pull/13619">#13619</a></li>
<li><a class="user-mention notranslate" data-hovercard-type="user"
data-hovercard-url="/users/vegerot/hovercard"
data-octo-click="hovercard-link-click"
data-octo-dimensions="link_type:self"
href="https://snyk.io/redirect/github/vegerot">@ vegerot</a> made their
first contribution in <a aria-label="Pull request #13674"
class="issue-link js-issue-link" data-error-text="Failed to load title"
data-id="1495407600" data-permission-text="Title is private"
data-url="jestjs/jest#13674"
data-hovercard-type="pull_request"
data-hovercard-url="/jestjs/jest/pull/13674/hovercard"
href="https://snyk.io/redirect/github/facebook/jest/pull/13674">#13674</a></li>
<li><a class="user-mention notranslate" data-hovercard-type="user"
data-hovercard-url="/users/faustAbc/hovercard"
data-octo-click="hovercard-link-click"
data-octo-dimensions="link_type:self"
href="https://snyk.io/redirect/github/faustAbc">@ faustAbc</a> made
their first contribution in <a aria-label="Pull request #13331"
class="issue-link js-issue-link" data-error-text="Failed to load title"
data-id="1389128446" data-permission-text="Title is private"
data-url="jestjs/jest#13331"
data-hovercard-type="pull_request"
data-hovercard-url="/jestjs/jest/pull/13331/hovercard"
href="https://snyk.io/redirect/github/facebook/jest/pull/13331">#13331</a></li>
<li><a class="user-mention notranslate" data-hovercard-type="user"
data-hovercard-url="/users/valentincostam/hovercard"
data-octo-click="hovercard-link-click"
data-octo-dimensions="link_type:self"
href="https://snyk.io/redirect/github/valentincostam">@
valentincostam</a> made their first contribution in <a aria-label="Pull
request #13634" class="issue-link js-issue-link" data-error-text="Failed
to load title" data-id="1458596413" data-permission-text="Title is
private" data-url="jestjs/jest#13634"
data-hovercard-type="pull_request"
data-hovercard-url="/jestjs/jest/pull/13634/hovercard"
href="https://snyk.io/redirect/github/facebook/jest/pull/13634">#13634</a></li>
<li><a class="user-mention notranslate" data-hovercard-type="user"
data-hovercard-url="/users/unional/hovercard"
data-octo-click="hovercard-link-click"
data-octo-dimensions="link_type:self"
href="https://snyk.io/redirect/github/unional">@ unional</a> made their
first contribution in <a aria-label="Pull request #13721"
class="issue-link js-issue-link" data-error-text="Failed to load title"
data-id="1517018945" data-permission-text="Title is private"
data-url="jestjs/jest#13721"
data-hovercard-type="pull_request"
data-hovercard-url="/jestjs/jest/pull/13721/hovercard"
href="https://snyk.io/redirect/github/facebook/jest/pull/13721">#13721</a></li>
<li><a class="user-mention notranslate" data-hovercard-type="user"
data-hovercard-url="/users/andrewiggins/hovercard"
data-octo-click="hovercard-link-click"
data-octo-dimensions="link_type:self"
href="https://snyk.io/redirect/github/andrewiggins">@ andrewiggins</a>
made their first contribution in <a aria-label="Pull request #13654"
class="issue-link js-issue-link" data-error-text="Failed to load title"
data-id="1471979635" data-permission-text="Title is private"
data-url="jestjs/jest#13654"
data-hovercard-type="pull_request"
data-hovercard-url="/jestjs/jest/pull/13654/hovercard"
href="https://snyk.io/redirect/github/facebook/jest/pull/13654">#13654</a></li>
<li><a class="user-mention notranslate" data-hovercard-type="user"
data-hovercard-url="/users/michal-kocarek/hovercard"
data-octo-click="hovercard-link-click"
data-octo-dimensions="link_type:self"
href="https://snyk.io/redirect/github/michal-kocarek">@
michal-kocarek</a> made their first contribution in <a aria-label="Pull
request #13496" class="issue-link js-issue-link" data-error-text="Failed
to load title" data-id="1419944203" data-permission-text="Title is
private" data-url="jestjs/jest#13496"
data-hovercard-type="pull_request"
data-hovercard-url="/jestjs/jest/pull/13496/hovercard"
href="https://snyk.io/redirect/github/facebook/jest/pull/13496">#13496</a></li>
<li><a class="user-mention notranslate" data-hovercard-type="user"
data-hovercard-url="/users/jdufresne/hovercard"
data-octo-click="hovercard-link-click"
data-octo-dimensions="link_type:self"
href="https://snyk.io/redirect/github/jdufresne">@ jdufresne</a> made
their first contribution in <a aria-label="Pull request #13469"
class="issue-link js-issue-link" data-error-text="Failed to load title"
data-id="1413337332" data-permission-text="Title is private"
data-url="jestjs/jest#13469"
data-hovercard-type="pull_request"
data-hovercard-url="/jestjs/jest/pull/13469/hovercard"
href="https://snyk.io/redirect/github/facebook/jest/pull/13469">#13469</a></li>
<li><a class="user-mention notranslate" data-hovercard-type="user"
data-hovercard-url="/users/feliperli/hovercard"
data-octo-click="hovercard-link-click"
data-octo-dimensions="link_type:self"
href="https://snyk.io/redirect/github/feliperli">@ feliperli</a> made
their first contribution in <a aria-label="Pull request #13692"
class="issue-link js-issue-link" data-error-text="Failed to load title"
data-id="1509760101" data-permission-text="Title is private"
data-url="jestjs/jest#13692"
data-hovercard-type="pull_request"
data-hovercard-url="/jestjs/jest/pull/13692/hovercard"
href="https://snyk.io/redirect/github/facebook/jest/pull/13692">#13692</a></li>
<li><a class="user-mention notranslate" data-hovercard-type="user"
data-hovercard-url="/users/bob-zs/hovercard"
data-octo-click="hovercard-link-click"
data-octo-dimensions="link_type:self"
href="https://snyk.io/redirect/github/bob-zs">@ bob-zs</a> made their
first contribution in <a aria-label="Pull request #13740"
class="issue-link js-issue-link" data-error-text="Failed to load title"
data-id="1523436837" data-permission-text="Title is private"
data-url="jestjs/jest#13740"
data-hovercard-type="pull_request"
data-hovercard-url="/jestjs/jest/pull/13740/hovercard"
href="https://snyk.io/redirect/github/facebook/jest/pull/13740">#13740</a></li>
<li><a class="user-mention notranslate" data-hovercard-type="user"
data-hovercard-url="/users/MasterOdin/hovercard"
data-octo-click="hovercard-link-click"
data-octo-dimensions="link_type:self"
href="https://snyk.io/redirect/github/MasterOdin">@ MasterOdin</a> made
their first contribution in <a aria-label="Pull request #13743"
class="issue-link js-issue-link" data-error-text="Failed to load title"
data-id="1524525830" data-permission-text="Title is private"
data-url="jestjs/jest#13743"
data-hovercard-type="pull_request"
data-hovercard-url="/jestjs/jest/pull/13743/hovercard"
href="https://snyk.io/redirect/github/facebook/jest/pull/13743">#13743</a></li>
<li><a class="user-mention notranslate" data-hovercard-type="user"
data-hovercard-url="/users/kalyncoose/hovercard"
data-octo-click="hovercard-link-click"
data-octo-dimensions="link_type:self"
href="https://snyk.io/redirect/github/kalyncoose">@ kalyncoose</a> made
their first contribution in <a aria-label="Pull request #13746"
class="issue-link js-issue-link" data-error-text="Failed to load title"
data-id="1525575221" data-permission-text="Title is private"
data-url="jestjs/jest#13746"
data-hovercard-type="pull_request"
data-hovercard-url="/jestjs/jest/pull/13746/hovercard"
href="https://snyk.io/redirect/github/facebook/jest/pull/13746">#13746</a></li>
<li><a class="user-mention notranslate" data-hovercard-type="user"
data-hovercard-url="/users/arash-hacker/hovercard"
data-octo-click="hovercard-link-click"
data-octo-dimensions="link_type:self"
href="https://snyk.io/redirect/github/arash-hacker">@ arash-hacker</a>
made their first contribution in <a aria-label="Pull request #13747"
class="issue-link js-issue-link" data-error-text="Failed to load title"
data-id="1526515649" data-permission-text="Title is private"
data-url="jestjs/jest#13747"
data-hovercard-type="pull_request"
data-hovercard-url="/jestjs/jest/pull/13747/hovercard"
href="https://snyk.io/redirect/github/facebook/jest/pull/13747">#13747</a></li>
<li><a class="user-mention notranslate" data-hovercard-type="user"
data-hovercard-url="/users/jomendez/hovercard"
data-octo-click="hovercard-link-click"
data-octo-dimensions="link_type:self"
href="https://snyk.io/redirect/github/jomendez">@ jomendez</a> made
their first contribution in <a aria-label="Pull request #13741"
class="issue-link js-issue-link" data-error-text="Failed to load title"
data-id="1523457981" data-permission-text="Title is private"
data-url="jestjs/jest#13741"
data-hovercard-type="pull_request"
data-hovercard-url="/jestjs/jest/pull/13741/hovercard"
href="https://snyk.io/redirect/github/facebook/jest/pull/13741">#13741</a></li>
<li><a class="user-mention notranslate" data-hovercard-type="user"
data-hovercard-url="/users/coffeebeats/hovercard"
data-octo-click="hovercard-link-click"
data-octo-dimensions="link_type:self"
href="https://snyk.io/redirect/github/coffeebeats">@ coffeebeats</a>
made their first contribution in <a aria-label="Pull request #13770"
class="issue-link js-issue-link" data-error-text="Failed to load title"
data-id="1533108122" data-permission-text="Title is private"
data-url="jestjs/jest#13770"
data-hovercard-type="pull_request"
data-hovercard-url="/jestjs/jest/pull/13770/hovercard"
href="https://snyk.io/redirect/github/facebook/jest/pull/13770">#13770</a></li>
<li><a class="user-mention notranslate" data-hovercard-type="user"
data-hovercard-url="/users/lachrist/hovercard"
data-octo-click="hovercard-link-click"
data-octo-dimensions="link_type:self"
href="https://snyk.io/redirect/github/lachrist">@ lachrist</a> made
their first contribution in <a aria-label="Pull request #13762"
class="issue-link js-issue-link" data-error-text="Failed to load title"
data-id="1531083529" data-permission-text="Title is private"
data-url="jestjs/jest#13762"
data-hovercard-type="pull_request"
data-hovercard-url="/jestjs/jest/pull/13762/hovercard"
href="https://snyk.io/redirect/github/facebook/jest/pull/13762">#13762</a></li>
<li><a class="user-mention notranslate" data-hovercard-type="user"
data-hovercard-url="/users/lukeed/hovercard"
data-octo-click="hovercard-link-click"
data-octo-dimensions="link_type:self"
href="https://snyk.io/redirect/github/lukeed">@ lukeed</a> made their
first contribution in <a aria-label="Pull request #13777"
class="issue-link js-issue-link" data-error-text="Failed to load title"
data-id="1535564063" data-permission-text="Title is private"
data-url="jestjs/jest#13777"
data-hovercard-type="pull_request"
data-hovercard-url="/jestjs/jest/pull/13777/hovercard"
href="https://snyk.io/redirect/github/facebook/jest/pull/13777">#13777</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a class="commit-link"
href="https://snyk.io/redirect/github/facebook/jest/compare/v29.3.1...v29.4.0"><tt>v29.3.1...v29.4.0</tt></a></p>
      </li>
      <li>
<b>29.3.1</b> - <a
href="https://snyk.io/redirect/github/facebook/jest/releases/tag/v29.3.1">2022-11-08</a></br><h2>Fixes</h2>
<ul>
<li><code>[jest-config]</code> Do not warn about <code>preset</code> in
<code>ProjectConfig</code> (<a
href="https://snyk.io/redirect/github/facebook/jest/pull/13583"
data-hovercard-type="pull_request"
data-hovercard-url="/jestjs/jest/pull/13583/hovercard">#13583</a>)</li>
</ul>
<h2>Performance</h2>
<ul>
<li><code>[jest-transform]</code> Defer creation of cache directory (<a
href="https://snyk.io/redirect/github/facebook/jest/pull/13420"
data-hovercard-type="pull_request"
data-hovercard-url="/jestjs/jest/pull/13420/hovercard">#13420</a>)</li>
</ul>
      </li>
    </ul>
from <a
href="https://snyk.io/redirect/github/facebook/jest/releases">babel-jest
GitHub release notes</a>
  </details>
  <details>
    <summary>Package name: <b>jest</b></summary>
    <ul>
      <li>
<b>29.4.0</b> - <a
href="https://snyk.io/redirect/github/facebook/jest/releases/tag/v29.4.0">2023-01-24</a></br><a
href="https://snyk.io/redirect/github/facebook/jest/releases/tag/v29.4.0">
Read more </a>
      </li>
      <li>
<b>29.3.1</b> - <a
href="https://snyk.io/redirect/github/facebook/jest/releases/tag/v29.3.1">2022-11-08</a></br><h2>Fixes</h2>
<ul>
<li><code>[jest-config]</code> Do not warn about <code>preset</code> in
<code>ProjectConfig</code> (<a
href="https://snyk.io/redirect/github/facebook/jest/pull/13583"
data-hovercard-type="pull_request"
data-hovercard-url="/jestjs/jest/pull/13583/hovercard">#13583</a>)</li>
</ul>
<h2>Performance</h2>
<ul>
<li><code>[jest-transform]</code> Defer creation of cache directory (<a
href="https://snyk.io/redirect/github/facebook/jest/pull/13420"
data-hovercard-type="pull_request"
data-hovercard-url="/jestjs/jest/pull/13420/hovercard">#13420</a>)</li>
</ul>
      </li>
    </ul>
from <a
href="https://snyk.io/redirect/github/facebook/jest/releases">jest
GitHub release notes</a>
  </details>
</details>


<details>
  <summary><b>Commit messages</b></summary>
  </br>
  <details>
    <summary>Package name: <b>babel-jest</b></summary>
    <ul>
<li><a
href="https://snyk.io/redirect/github/facebook/jest/commit/4bc0e8acaf990e6618a7bed1dca67760c20bb12a">4bc0e8a</a>
v29.4.0</li>
<li><a
href="https://snyk.io/redirect/github/facebook/jest/commit/00112db41f2fa72b2a71415ec2270b568de72957">00112db</a>
chore: update changelog for release</li>
<li><a
href="https://snyk.io/redirect/github/facebook/jest/commit/a875150110b0ce35844a61c7797815c6716c1601">a875150</a>
docs: roll new version</li>
<li><a
href="https://snyk.io/redirect/github/facebook/jest/commit/7626da9e5e18a61ebc3b2a3f74e7116962243ee3">7626da9</a>
fix(resolve): remove faulty check for &#x60;node:&#x60; modules
(#13806)</li>
<li><a
href="https://snyk.io/redirect/github/facebook/jest/commit/b40429649d5e673eb5c572db8a5cfd1218320a40">b404296</a>
chore: add validation of import assertions (#13805)</li>
<li><a
href="https://snyk.io/redirect/github/facebook/jest/commit/6f8e91804b5515a64d1baf439bc1d84ee0ea61cd">6f8e918</a>
fix: enforce import assertions when importing JSON in ESM (#12755)</li>
<li><a
href="https://snyk.io/redirect/github/facebook/jest/commit/e0b12497c9953c633023a414d57ba92db0bc61ae">e0b1249</a>
chore: update babel-plugin-tester (#13804)</li>
<li><a
href="https://snyk.io/redirect/github/facebook/jest/commit/b9282e197294f498f9995d73d242c3e407f7a10e">b9282e1</a>
chore: refresh lockfile (#13798)</li>
<li><a
href="https://snyk.io/redirect/github/facebook/jest/commit/56f14544d5dc9b0e0772357b108de3da3c149ac4">56f1454</a>
docs: restructure the Expect API page (#13791)</li>
<li><a
href="https://snyk.io/redirect/github/facebook/jest/commit/26661e2f9873c7c0bbc0612c423840d84df168e8">26661e2</a>
chore(stale-action): leave PRs with Pinned label alone</li>
<li><a
href="https://snyk.io/redirect/github/facebook/jest/commit/63bf909da19c04c300bdcbd6555598f6588a73d0">63bf909</a>
docs: clean up &#x60;expect.extend&#x60; documentation (#13788)</li>
<li><a
href="https://snyk.io/redirect/github/facebook/jest/commit/ea5e47e28d619828048f2dce6c015b8b77c4f6fb">ea5e47e</a>
refactor(resolve): use &#x60;resolve.exports&#x60; for
&#x60;imports&#x60; (#13777)</li>
<li><a
href="https://snyk.io/redirect/github/facebook/jest/commit/8ef8c20dc6489da758d1f32100e70b07ff4df13d">8ef8c20</a>
docs: add documentation of the &#x60;jest.deepUnmock()&#x60; method
(#13774)</li>
<li><a
href="https://snyk.io/redirect/github/facebook/jest/commit/c010e3597dbd021d7fe88060ecbe282fe29a8d3d">c010e35</a>
refactor(@ jest/environment): keep alphabetic order in the
&#x60;Jest&#x60; interface (#13773)</li>
<li><a
href="https://snyk.io/redirect/github/facebook/jest/commit/9ebb37378ffe3a03c3dfa2bac9ec9ed27c6b3339">9ebb373</a>
docs: fix one of &#x60;mockFn.mockImplementation()&#x60; TS examples
(#13775)</li>
<li><a
href="https://snyk.io/redirect/github/facebook/jest/commit/86f3c8937503d5bded0f936e671f51ec77022f2e">86f3c89</a>
feat: support async createTransformer (#13762)</li>
<li><a
href="https://snyk.io/redirect/github/facebook/jest/commit/2993a4f4845c0bebafb7cac95ae751615272f16c">2993a4f</a>
docs: fix various grammatical errors (#13768)</li>
<li><a
href="https://snyk.io/redirect/github/facebook/jest/commit/49204ac6e06ecc53d4ebf45feab4c01da7756aec">49204ac</a>
fix(jest-transform): ensure correct config is passed to preprocessors
specified multiple times in &#x60;transform&#x60; (#13770)</li>
<li><a
href="https://snyk.io/redirect/github/facebook/jest/commit/928f6ccec5fdb92ef157d6df832444d989c6b17b">928f6cc</a>
docs: add entry for isEnvironmentTornDown</li>
<li><a
href="https://snyk.io/redirect/github/facebook/jest/commit/73d7c1de78f9e48c03b770257c3e7fa962bb6a2e">73d7c1d</a>
feat(jest-runtime): expose isEnvironmentTornDown variable (#13741)</li>
<li><a
href="https://snyk.io/redirect/github/facebook/jest/commit/7b33879aa6b07f9d8887b2f37e302ac60d6ec7bc">7b33879</a>
docs: add &quot;shorthand for&quot; notes in Mock Function API
documentation (#13771)</li>
<li><a
href="https://snyk.io/redirect/github/facebook/jest/commit/1a97aa6df02aab558319067ed3f3af1178c7419d">1a97aa6</a>
chore: update resolve.exports for bug fixes</li>
<li><a
href="https://snyk.io/redirect/github/facebook/jest/commit/601ba290cd3c456c433461326df4c98dd4d07161">601ba29</a>
Fix grammatical error in GlobalAPI.md (#13752)</li>
<li><a
href="https://snyk.io/redirect/github/facebook/jest/commit/eca83e7221137785d585215f9ae9251adcdbacc3">eca83e7</a>
Add preposition &#x27;on&#x27; after verb &#x27;spy&#x27; in error msgs
and docs (#13767)</li>
    </ul>

<a
href="https://snyk.io/redirect/github/facebook/jest/compare/05deb8393c4ad71e19be2567b704dfd3a2ab5fc9...4bc0e8acaf990e6618a7bed1dca67760c20bb12a">Compare</a>
  </details>
  <details>
    <summary>Package name: <b>jest</b></summary>
    <ul>
<li><a
href="https://snyk.io/redirect/github/facebook/jest/commit/4bc0e8acaf990e6618a7bed1dca67760c20bb12a">4bc0e8a</a>
v29.4.0</li>
<li><a
href="https://snyk.io/redirect/github/facebook/jest/commit/00112db41f2fa72b2a71415ec2270b568de72957">00112db</a>
chore: update changelog for release</li>
<li><a
href="https://snyk.io/redirect/github/facebook/jest/commit/a875150110b0ce35844a61c7797815c6716c1601">a875150</a>
docs: roll new version</li>
<li><a
href="https://snyk.io/redirect/github/facebook/jest/commit/7626da9e5e18a61ebc3b2a3f74e7116962243ee3">7626da9</a>
fix(resolve): remove faulty check for &#x60;node:&#x60; modules
(#13806)</li>
<li><a
href="https://snyk.io/redirect/github/facebook/jest/commit/b40429649d5e673eb5c572db8a5cfd1218320a40">b404296</a>
chore: add validation of import assertions (#13805)</li>
<li><a
href="https://snyk.io/redirect/github/facebook/jest/commit/6f8e91804b5515a64d1baf439bc1d84ee0ea61cd">6f8e918</a>
fix: enforce import assertions when importing JSON in ESM (#12755)</li>
<li><a
href="https://snyk.io/redirect/github/facebook/jest/commit/e0b12497c9953c633023a414d57ba92db0bc61ae">e0b1249</a>
chore: update babel-plugin-tester (#13804)</li>
<li><a
href="https://snyk.io/redirect/github/facebook/jest/commit/b9282e197294f498f9995d73d242c3e407f7a10e">b9282e1</a>
chore: refresh lockfile (#13798)</li>
<li><a
href="https://snyk.io/redirect/github/facebook/jest/commit/56f14544d5dc9b0e0772357b108de3da3c149ac4">56f1454</a>
docs: restructure the Expect API page (#13791)</li>
<li><a
href="https://snyk.io/redirect/github/facebook/jest/commit/26661e2f9873c7c0bbc0612c423840d84df168e8">26661e2</a>
chore(stale-action): leave PRs with Pinned label alone</li>
<li><a
href="https://snyk.io/redirect/github/facebook/jest/commit/63bf909da19c04c300bdcbd6555598f6588a73d0">63bf909</a>
docs: clean up &#x60;expect.extend&#x60; documentation (#13788)</li>
<li><a
href="https://snyk.io/redirect/github/facebook/jest/commit/ea5e47e28d619828048f2dce6c015b8b77c4f6fb">ea5e47e</a>
refactor(resolve): use &#x60;resolve.exports&#x60; for
&#x60;imports&#x60; (#13777)</li>
<li><a
href="https://snyk.io/redirect/github/facebook/jest/commit/8ef8c20dc6489da758d1f32100e70b07ff4df13d">8ef8c20</a>
docs: add documentation of the &#x60;jest.deepUnmock()&#x60; method
(#13774)</li>
<li><a
href="https://snyk.io/redirect/github/facebook/jest/commit/c010e3597dbd021d7fe88060ecbe282fe29a8d3d">c010e35</a>
refactor(@ jest/environment): keep alphabetic order in the
&#x60;Jest&#x60; interface (#13773)</li>
<li><a
href="https://snyk.io/redirect/github/facebook/jest/commit/9ebb37378ffe3a03c3dfa2bac9ec9ed27c6b3339">9ebb373</a>
docs: fix one of &#x60;mockFn.mockImplementation()&#x60; TS examples
(#13775)</li>
<li><a
href="https://snyk.io/redirect/github/facebook/jest/commit/86f3c8937503d5bded0f936e671f51ec77022f2e">86f3c89</a>
feat: support async createTransformer (#13762)</li>
<li><a
href="https://snyk.io/redirect/github/facebook/jest/commit/2993a4f4845c0bebafb7cac95ae751615272f16c">2993a4f</a>
docs: fix various grammatical errors (#13768)</li>
<li><a
href="https://snyk.io/redirect/github/facebook/jest/commit/49204ac6e06ecc53d4ebf45feab4c01da7756aec">49204ac</a>
fix(jest-transform): ensure correct config is passed to preprocessors
specified multiple times in &#x60;transform&#x60; (#13770)</li>
<li><a
href="https://snyk.io/redirect/github/facebook/jest/commit/928f6ccec5fdb92ef157d6df832444d989c6b17b">928f6cc</a>
docs: add entry for isEnvironmentTornDown</li>
<li><a
href="https://snyk.io/redirect/github/facebook/jest/commit/73d7c1de78f9e48c03b770257c3e7fa962bb6a2e">73d7c1d</a>
feat(jest-runtime): expose isEnvironmentTornDown variable (#13741)</li>
<li><a
href="https://snyk.io/redirect/github/facebook/jest/commit/7b33879aa6b07f9d8887b2f37e302ac60d6ec7bc">7b33879</a>
docs: add &quot;shorthand for&quot; notes in Mock Function API
documentation (#13771)</li>
<li><a
href="https://snyk.io/redirect/github/facebook/jest/commit/1a97aa6df02aab558319067ed3f3af1178c7419d">1a97aa6</a>
chore: update resolve.exports for bug fixes</li>
<li><a
href="https://snyk.io/redirect/github/facebook/jest/commit/601ba290cd3c456c433461326df4c98dd4d07161">601ba29</a>
Fix grammatical error in GlobalAPI.md (#13752)</li>
<li><a
href="https://snyk.io/redirect/github/facebook/jest/commit/eca83e7221137785d585215f9ae9251adcdbacc3">eca83e7</a>
Add preposition &#x27;on&#x27; after verb &#x27;spy&#x27; in error msgs
and docs (#13767)</li>
    </ul>

<a
href="https://snyk.io/redirect/github/facebook/jest/compare/05deb8393c4ad71e19be2567b704dfd3a2ab5fc9...4bc0e8acaf990e6618a7bed1dca67760c20bb12a">Compare</a>
  </details>
</details>
<hr/>

**Note:** *You are seeing this because you or someone else with access
to this repository has authorized Snyk to open upgrade PRs.*

For more information: <img
src="https://api.segment.io/v1/pixel/track?data=eyJ3cml0ZUtleSI6InJyWmxZcEdHY2RyTHZsb0lYd0dUcVg4WkFRTnNCOUEwIiwiYW5vbnltb3VzSWQiOiJkM2ZlYTczOC1kMDZkLTRmMTYtYjc5MS03ODdiZWIxYjI4ZTkiLCJldmVudCI6IlBSIHZpZXdlZCIsInByb3BlcnRpZXMiOnsicHJJZCI6ImQzZmVhNzM4LWQwNmQtNGYxNi1iNzkxLTc4N2JlYjFiMjhlOSJ9fQ=="
width="0" height="0"/>

🧐 [View latest project
report](https://app.snyk.io/org/sandbox-2ba/project/852e6e4f-be96-45c8-b370-1060f5ebee55?utm_source&#x3D;github&amp;utm_medium&#x3D;referral&amp;page&#x3D;upgrade-pr)

🛠 [Adjust upgrade PR
settings](https://app.snyk.io/org/sandbox-2ba/project/852e6e4f-be96-45c8-b370-1060f5ebee55/settings/integration?utm_source&#x3D;github&amp;utm_medium&#x3D;referral&amp;page&#x3D;upgrade-pr)

🔕 [Ignore this dependency or unsubscribe from future upgrade
PRs](https://app.snyk.io/org/sandbox-2ba/project/852e6e4f-be96-45c8-b370-1060f5ebee55/settings/integration?pkg&#x3D;babel-jest&amp;pkg&#x3D;jest&amp;utm_source&#x3D;github&amp;utm_medium&#x3D;referral&amp;page&#x3D;upgrade-pr#auto-dep-upgrades)

<!---
(snyk:metadata:{"prId":"d3fea738-d06d-4f16-b791-787beb1b28e9","prPublicId":"d3fea738-d06d-4f16-b791-787beb1b28e9","dependencies":[{"name":"babel-jest","from":"29.3.1","to":"29.4.0"},{"name":"jest","from":"29.3.1","to":"29.4.0"}],"packageManager":"npm","type":"auto","projectUrl":"https://app.snyk.io/org/sandbox-2ba/project/852e6e4f-be96-45c8-b370-1060f5ebee55?utm_source=github&utm_medium=referral&page=upgrade-pr","projectPublicId":"852e6e4f-be96-45c8-b370-1060f5ebee55","env":"prod","prType":"upgrade","vulns":[],"issuesToFix":[],"upgrade":[],"upgradeInfo":{"versionsDiff":1,"publishedDate":"2023-01-24T10:56:00.839Z"},"templateVariants":[],"hasFixes":false,"isMajorUpgrade":false,"isBreakingChange":false,"priorityScoreList":[]})
--->

---------

Co-authored-by: snyk-bot <snyk-bot@snyk.io>
@github-actions
Copy link

This pull request has been automatically locked since there has not been any recent activity after it was closed. Please open a new issue for related bugs.
Please note this issue tracker is not a help forum. We recommend using StackOverflow or our discord channel for questions.

@github-actions github-actions bot locked as resolved and limited conversation to collaborators Feb 24, 2023
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

[Feature]: Allow extending functionality of toEqual
6 participants